package middleware

import (
	"github.com/kataras/iris/v12"
	"iristest/common/log"
	"iristest/common/merror"
)

// 全局异常处理

func ErrorRecover(ctx iris.Context) {
	defer func() {
		err := recover()
		var myError *merror.Err
		switch err.(type) {
		case nil:
			if ctx.IsStopped() {
				return
			}
		case merror.Err:
			//
			temp := err.(merror.Err)
			myError = &temp
		default:
			log.Err(err.(error), "系统错误")
			return
		}
		if myError == nil {
			return
		}
		switch myError.GetType() {
		case merror.NullPointer:
			//空指针异常处理
			log.Err(myError)
		case merror.TypeConversion:
			//类型转换异常处理
			log.Err(myError)
		case merror.Transboundary:
		//索引越界异常处理
		default:
			//其他异常处理
			log.Err(myError)
		}
	}()
}
